home *** CD-ROM | disk | FTP | other *** search
/ Chaos CD Blue / Chaos_CD_Blue__[1999].iso / contrib / selfhtml / wsuchen.js < prev    next >
Text File  |  1998-04-27  |  9KB  |  415 lines

  1.  
  2. // ===============================================================
  3. // OFFLINE-SUCHMASCHINE in JAVASCRIPT 1.1
  4. //
  5. // Datum:     15.04.1998
  6. //
  7. // Autor:     Stefan Mueller (S_Mueller@public.uni-hamburg.de)
  8. //            http://www.rrz.uni-hamburg.de/philsem/stefan_mueller/
  9. // CoAutorin: Christine Kuehnel
  10. //            http://screenExa.net/
  11. //
  12. // getestet:  MSIE 4.0 (Win95/NT)
  13. //          Netscape 3.1 (Win95/NT)
  14. //          Netscape 4.04 (Win95/NT)
  15. //
  16.  
  17.  
  18. // --------------------------------------------------------------
  19. // Der Uebersicht wegen, wird der Suchstring zur Laufzeit
  20. // der Variablen "query" uebergeben.
  21.  
  22.  var query = "";
  23.  
  24.  
  25. // --------------------------------------------------------------
  26. // Voraussetzung sind zwei frames  [ INPUTFRAME, OUTPUTFRAME ]
  27. // Beide koennen hier geaendert werden, was deren Name betrifft.
  28. // Eingerichtet werden die Frames durch die Datei "index.html"
  29.  
  30.  var INPUTFRAME  = parent.frames['Suche'];
  31.  var OUTPUTFRAME = parent.frames['Anzeige'];
  32.  
  33. // Zur uebersichtlicheren Handhabung wird gleich auf die
  34. // jeweiligen Dokumente zugegriffen
  35.  
  36.  var INPUT  = INPUTFRAME.document;
  37.  var OUTPUT = OUTPUTFRAME.document;
  38.  
  39.  
  40. // Ersetzung von dt.spr. Umlauten in ISO 8859-1 Entities
  41.  
  42. function noumlaut( str )
  43. {
  44.     var l = 0;         // Laenge des Strings
  45.     var i = 0;         // Index im Strings
  46.     var newstr = "";     // Rueckgabestring
  47.     var a = "";        // aktuelles Zeichen
  48.  
  49.     l = str.length;
  50.     for (i=0; i<l;i++)
  51.     {
  52.  
  53.         // i-tes Zeichen gegebfalls aendern
  54.         a = str.charAt(i);
  55.  
  56.         // ISO 8859-1 Entities
  57.         if ( a == "Σ") { a = "Σ" };
  58.         if ( a == "÷") { a = "ö" };
  59.         if ( a == "ⁿ") { a = "ü" };
  60.         if ( a == "─") { a = "Σ" };
  61.         if ( a == "╓") { a = "Ö" };
  62.         if ( a == "▄") { a = "Ü" };
  63.         if ( a == "▀") { a = "ß" };
  64.         
  65.         // Neuen String zusammensetzen
  66.         newstr = newstr + a ;
  67.     }
  68.     
  69.     return newstr;
  70. }
  71.  
  72.  
  73.  
  74. // --------------------------------------------------------------
  75. // Abfrage, ob der Suchstring "query" in dem Datenstring "str"
  76. // enthalten ist.
  77. // INPUT:  String
  78. // OUTPUT: Boolean
  79.  
  80.  function found( str )
  81.  {
  82.  
  83.     // Variablen-Deklaration
  84.      var isfound = false;
  85.      var s = "";
  86.      var q = "";
  87.     
  88.     // Gross/Kleinschreibung ignorieren
  89.      s = str.toLowerCase();    
  90.      q = query.toLowerCase();
  91.  
  92.  
  93.     // Umlaute beseitigen
  94.      // s = noumlaut( s );
  95.      q = noumlaut( q );
  96.  
  97.     // Leerzeichen anfuegen, falls ganzer Ausdruck
  98.      s = " " + s + " ";    
  99.  
  100.     
  101.     // true, falls q Teil von s ist, sonst false
  102.      isfound = ( s.indexOf( q ) > -1 ) 
  103.  
  104.      return( isfound );
  105. }
  106.  
  107. // ==============================================================
  108. //
  109. // Ausgabe-Prozeduren
  110. //
  111. // Voraussetzung sind zwei Frames (siehe: Deklaration oben)
  112. //
  113.  
  114. // --------------------------------------------------------------
  115. // Ausgabe des HTML-Headers
  116.  
  117. function HTMLHeader()
  118. {
  119.     with ( OUTPUT )
  120.     {
  121.         writeln("<head>");
  122.         writeln("<title>");
  123.         writeln("</title>");
  124.         writeln("</head>");
  125.     }
  126. }
  127.  
  128. // --------------------------------------------------------------
  129. // Ausgabe des BODY-Tags mit den Benutzerangaben (Diese Benutzerangaben
  130. // erfolgen in den hidden-Elementen der QueryForm und werden inhaltlich
  131. // nicht ueberprueft)
  132.  
  133. function HTMLOpenBody()
  134. {
  135.     with ( OUTPUT )
  136.     {
  137.         with( INPUT.QueryForm )
  138.         {
  139.  
  140.         write("<body");
  141.         
  142.         // BGCOLOR
  143.          if (bgcolor.value)
  144.           write(" bgcolor=\""+bgcolor.value+"\"");
  145.  
  146.         // TEXT
  147.          if (text.value)
  148.           write(" text=\""+text.value+"\"");
  149.           
  150.         // LINK
  151.          if (link.value)
  152.           write(" link=\""+link.value+"\"");
  153.           
  154.         // ALINK
  155.          if (alink.value)
  156.           write(" alink=\""+alink.value+"\"");
  157.  
  158.         // VLINK
  159.          if (vlink.value)
  160.           write(" vlink=\""+vlink.value+"\"");
  161.  
  162.         // BACKGROUND
  163.          if (background.value)
  164.           write(" background=\""+background.value+"\"");
  165.  
  166.         writeln(">");
  167.  
  168.         }  // INPUT.QueryForm
  169.         
  170.     } // OUTPUT
  171. }
  172.  
  173. // --------------------------------------------------------------
  174. // Ausgabe der HTML-BODY-Schliessung
  175. // (Nur aus programm-optischen Gruenden)
  176.  
  177. function HTMLCloseBody()
  178. {
  179.     with ( OUTPUT )
  180.     {
  181.         writeln("</body>");
  182.     }
  183. }
  184.  
  185.  
  186.  
  187. // --------------------------------------------------------------
  188. // Ausgabe der HTML-FONT-Eroeffnung mit Benutzer-Angaben
  189. // (siehe: HTMLOpenBody() )
  190.  
  191. function HTMLOpenFont()
  192. {
  193.     with ( OUTPUT )
  194.     {
  195.         with( INPUT.QueryForm )
  196.         {
  197.          write("<font" );
  198.         
  199.         // FACE        
  200.          if (font_face.value)
  201.           write(" face=\""+font_face.value+"\"");
  202.           
  203.         // SIZE  
  204.          if (font_size.value)
  205.           write(" size=\""+font_size.value+"\"");
  206.  
  207.         writeln(">" );
  208.         }  // INPUT.QueryForm
  209.         
  210.     } // OUTPUT
  211. }
  212.  
  213. // --------------------------------------------------------------
  214. // Ausgabe der HTML-FONT-Schliessung
  215. // (Nur aus programm-optischen Gruenden)
  216.  
  217. function HTMLCloseFont()
  218. {
  219.     with ( OUTPUT )
  220.     {
  221.         writeln("</font>");
  222.     }
  223. }
  224.  
  225.  
  226.  
  227.  
  228. // --------------------------------------------------------------
  229. // Ermitteln und Ausgabe der Suchergebnisse
  230. //
  231.  
  232. function ListSearch()
  233. {
  234.  
  235.     var count = 0;
  236.  
  237.     query = INPUT.QueryForm.query.value;
  238.  
  239.     with ( OUTPUT )
  240.     {
  241.         open();
  242.         writeln("<html>");
  243.  
  244.         HTMLHeader();
  245.         HTMLOpenBody();
  246.         HTMLOpenFont();
  247.         
  248.  
  249.         writeln("<b>Suche nach: ", query, "</b>" );
  250.         
  251.         writeln("<ol>");
  252.         
  253.         for (var i=1 ; i<Entry.length; i++)
  254.         {
  255.  
  256.             if ( found( Entry[i].Title )
  257.             ||   found( Entry[i].Keywords )
  258.             ||   found( Entry[i].Description )
  259.                ) 
  260.             {
  261.                 writeln("<li><p>");
  262.                 writeln( Entry[i].Format() );
  263.                 writeln("</p></li>");
  264.                 count++;
  265.             }
  266.         }
  267.            writeln("</ol>");
  268.  
  269.  
  270.         if ( count == 0 )
  271.            {
  272.             writeln("<p>Es wurde kein Eintrag gefunden");
  273.         }
  274.  
  275.         writeln("<p><b>Die Suche ist abgeschlossen</b>" );
  276.         HTMLCloseFont();
  277.         HTMLCloseBody();
  278.         writeln('</html>');
  279.         close();
  280.        }
  281. }
  282.  
  283. // --------------------------------------------------------------
  284. // Validieren der Abfrage
  285. //
  286. // Hier muss nachgesehen werden, ob die Suche gueltig ist.
  287. // Wenn ja, wird das Suchergebnis ausgegeben, sonst wird eine
  288. // Fehlermeldung ueber einen kleinen Dialog angezeigt.
  289. //
  290. // Zugriff ueber die HTML-Form QueryForm bei "Suchen"
  291.  
  292. function Validator()
  293. {
  294.  
  295.  
  296.     // Laengen-Ueberpruefung der Abfrage
  297.     if ( INPUT.QueryForm.query.value.length < 3 )
  298.     {
  299.         alert( "Es mⁿssen mehr als 2 Zeichen eingegeben werden" );
  300.         INPUT.QueryForm.query.focus();
  301.     }
  302.     else
  303.     {
  304.         ListSearch();
  305.     }
  306.     
  307. }
  308.  
  309. // --------------------------------------------------------------
  310. // In den Editierfeldern der HTML-Form wird beim Druck der
  311. // Entertaste ein submit ausgeloest. Dabei werden auch die
  312. // Javascript-Module neugeladen, was nicht so sinnig ist.
  313. // Dies wird hiermit unterbunden, aber dennoch die Suche
  314. // validiert und gegebenfalls ausgefuehrt.
  315. //
  316. // Zugriff ueber die HTML-Form QueryForm bei "OnSubmit"
  317.  
  318. function QueryEnter()
  319. {
  320.     Validator();
  321.     return (false);
  322. }
  323.  
  324.  
  325. // Verweis auf eine Hilfe-Seite
  326. function Help( url )
  327. {
  328.     OUTPUT.location = url;
  329. }
  330.  
  331.  
  332.  
  333. // ===========================================================
  334. //
  335. // Objekt-Typ "Element" nach einem Entwurf von Christine Kⁿhnel
  336. //
  337. // Eigenschaften:
  338. //
  339. //  Url            Internet-Adresse des entsprechenden Eintrages
  340. //  Title          Titel der Webseite, oder DatenQuelle
  341. //  Description    Kurze Beschreibung der Datei
  342. //  Keywords       Stichworte fuer das Auffinden der Datei
  343. //
  344. // Methoden:
  345. //
  346. //  new Element( Url, Title, Description, Keywoerds )
  347. //  Initialisieren eines neuen Elementes z.b.: Entry[i]
  348. //
  349. //  Format()
  350. //  Formatiert den Eintrag fuer die HTML-Ausgabe
  351. //
  352.  
  353. // ----------------------------------------------------------
  354. // Definition der Methode "Format()" 
  355. // ist zunaechst nur eine ganz gewoehnliche Standard-Funktion,
  356. // Zur Methode wird sie erst bei der Definition des Objektes
  357. // gemacht (kommt weiter unten)
  358. //
  359. // Aufruf der Methode mit Element.Format()
  360.  
  361.  function Format() 
  362.  {
  363.  
  364.     with( this )  // mit dem Element tue das Folgende
  365.     {
  366.  
  367.     // Deklaration des RueckgabeStrings
  368.     // (enthaelt die HTML-formatierte Ausgabe des Eintrages)
  369.     var e = "";
  370.  
  371.     // 1. Zeile, der Titel und Hyperlink (bold)    
  372.  
  373.     e = e + "<a href=\"" + this.Url + "\" target=_top>";
  374.     e = e + "<b>" + Title + "</b>\n";
  375.     e = e + "</a>\n";
  376.     
  377.     // 2. Zeile, Beschreibung (kursiv), wenn vorhanden
  378.     if ( Description && ( Description != "-" ))
  379.         
  380.      e = e + "<br>" + Description + "\n";
  381.      
  382.     }
  383.     return(e);
  384. }
  385.  
  386.  
  387. // ----------------------------------------------------------
  388. // Definition des Objektes "Element" inkl. Eigenschaften
  389. // und Methoden 
  390. //
  391.  
  392. function Element(Url,Title,Description,Keywords) 
  393. {
  394.  
  395.     // Eigenschaften
  396.     this.Url           = Url;
  397.     this.Title         = Title;
  398.     this.Description   = Description;
  399.     this.Keywords      = Keywords;
  400.     
  401.     // Methoden
  402.     this.Format        = Format;
  403. }
  404.  
  405. // ----------------------------------------------------------
  406. // Initialisieren eines Arrays von Element, auf das dann
  407. // mit Entry[1], Entry[2] etc zugegriffen werden kann.
  408. // Gueltig sind auch die Array-Methoden und Eigenschaften
  409. // wie Entry.length, um etwa die Anzahl der Elemente festzu-
  410. // stellen (siehe: ListSearch).
  411.  
  412. Entry    = new Array();
  413.  
  414.  
  415.